/*
 * @Author: Du Weixing duweixing@sgsimulation.com
 * @Date: 2024-10-17 16:07:46
 * @LastEditors: Du Weixing duweixing@sgsimulation.com
 * @LastEditTime: 2024-12-03 17:06:27
 * @FilePath: \SGFEM\Solver\SectionCalculator\BeamSection\FormulaMethod\src\BeamSectionFormulaCalculatorFactory.cpp
 * @Description: PBEAML 梁标准截面属性使用解析公式计算类工厂
 * 
 * Copyright (c) 2024 by 神工仿真, All Rights Reserved. 
 */

#include "../Interface/BeamSectionFormulaCalculatorFactory.h"
#include <iostream>
#include <assert.h>
#include "../../Common/BeamSecPropCalculatorInfo.h"
#include "RodBeamSectionFormulaCalculator.h"
#include "BarBeamSectionFormulaCalculator.h"
// #include "TubeBeamSectionFormulaCalculator.h"
// #include "Tube2BeamSectionFormulaCalculator.h"
// #include "BoxBeamSectionFormulaCalculator.h"
// #include "Box1BeamSectionFormulaCalculator.h"
// #include "IBeamSectionFormulaCalculator.h"
// #include "I1BeamSectionFormulaCalculator.h"
// #include "HBeamSectionFormulaCalculator.h"
#include "LBeamSectionFormulaCalculator.h"
// #include "ChanBeamSectionFormulaCalculator.h"
// #include "Chan1BeamSectionFormulaCalculator.h"
// #include "Chan2BeamSectionFormulaCalculator.h"
// #include "TBeamSectionFormulaCalculator.h"
// #include "T1BeamSectionFormulaCalculator.h"
// #include "T2BeamSectionFormulaCalculator.h"
// #include "CrossBeamSectionFormulaCalculator.h"
// #include "ZBeamSectionFormulaCalculator.h"
// #include "HexaBeamSectionFormulaCalculator.h"
// #include "HatBeamSectionFormulaCalculator.h"
// #include "Hat1BeamSectionFormulaCalculator.h"

using SG::DataStructure::FEM::BeamSectionStandardTypes;
using namespace SG::FEMSolver::Element;

BeamSectionFormulaCalculatorSP BeamSectionFormulaCalculatorFactory::Create (BeamSectionStandardTypes type)
{
    switch (type)
    {
        case BeamSectionStandardTypes::BEAMSECTYPE_ROD:
        {
            return std::make_shared<RodBeamSectionFormulaCalculator> ();
            break;
        }
        case BeamSectionStandardTypes::BEAMSECTYPE_BAR:
        {
            return std::make_shared<BarBeamSectionFormulaCalculator> ();
            break;
        }
        //  case BeamSectionStandardTypes::BEAMSECTYPE_TUBE:
        // {
        //     return std::make_shared<TubeBeamSectionFormulaCalculator> ();
        //     break;
        // }
        // case BeamSectionStandardTypes::BEAMSECTYPE_TUBE2:
        // {
        //     return std::make_shared<Tube2BeamSectionFormulaCalculator> ();
        //     break;
        // }
        // case BeamSectionStandardTypes::BEAMSECTYPE_BOX:
        // {
        //     return std::make_shared<BoxBeamSectionFormulaCalculator> ();
        //     break;
        // }
        // case BeamSectionStandardTypes::BEAMSECTYPE_BOX1:
        // {
        //     return std::make_shared<Box1BeamSectionFormulaCalculator> ();
        //     break;
        // }
        // case BeamSectionStandardTypes::BEAMSECTYPE_I:
        // {
        //     return std::make_shared<IBeamSectionFormulaCalculator> ();
        //     break;
        // }
        // case BeamSectionStandardTypes::BEAMSECTYPE_I1:
        // {
        //     return std::make_shared<I1BeamSectionFormulaCalculator> ();
        //     break;
        // }
        // case BeamSectionStandardTypes::BEAMSECTYPE_H:
        // {
        //     return std::make_shared<HBeamSectionFormulaCalculator> ();
        //     break;
        // }
        case BeamSectionStandardTypes::BEAMSECTYPE_L:
        {
            return std::make_shared<LBeamSectionFormulaCalculator> ();
            break;
        }
        // case BeamSectionStandardTypes::BEAMSECTYPE_CHAN:
        // {
        //     return std::make_shared<ChanBeamSectionFormulaCalculator> ();
        //     break;
        // }
        // case BeamSectionStandardTypes::BEAMSECTYPE_CHAN1:
        // {
        //     return std::make_shared<Chan1BeamSectionFormulaCalculator> ();
        //     break;
        // }
        // case BeamSectionStandardTypes::BEAMSECTYPE_CHAN2:
        // {
        //     return std::make_shared<Chan2BeamSectionFormulaCalculator> ();
        //     break;
        // }
        // case BeamSectionStandardTypes::BEAMSECTYPE_T:
        // {
        //     return std::make_shared<TBeamSectionFormulaCalculator> ();
        //     break;
        // }
        // case BeamSectionStandardTypes::BEAMSECTYPE_T1:
        // {
        //     return std::make_shared<T1BeamSectionFormulaCalculator> ();
        //     break;
        // }
        // case BeamSectionStandardTypes::BEAMSECTYPE_T2:
        // {
        //     return std::make_shared<T2BeamSectionFormulaCalculator> ();
        //     break;
        // }
        // case BeamSectionStandardTypes::BEAMSECTYPE_CROSS:
        // {
        //     return std::make_shared<CrossBeamSectionFormulaCalculator> ();
        //     break;
        // }
        // case BeamSectionStandardTypes::BEAMSECTYPE_Z:
        // {
        //     return std::make_shared<ZBeamSectionFormulaCalculator> ();
        //     break;
        // }
        // case BeamSectionStandardTypes::BEAMSECTYPE_HEXA:
        // {
        //     return std::make_shared<HexaBeamSectionFormulaCalculator> ();
        //     break;
        // }
        // case BeamSectionStandardTypes::BEAMSECTYPE_HAT:
        // {
        //     return std::make_shared<HatBeamSectionFormulaCalculator> ();
        //     break;
        // }
        // case BeamSectionStandardTypes::BEAMSECTYPE_HAT1:
        // {
        //     return std::make_shared<Hat1BeamSectionFormulaCalculator> ();
        //     break;
        // }
        default:
            break;
    }

    std::cout << NOT_SUPPORT_SECTOIN_TYPE << static_cast<int> (type) << " \n";
    assert (0);
    return nullptr;
}